package com.geek.javase.ch09.work;

/*
 *@author wangpeng
 *2025/10/17 16:57
 *@description TODO
 */

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;

/**
 * 2.去除ArrayList集合中重复元素
 *   1>.存入字符串元素
 *   2>.存入自定义对象元素（如Person对象）
 */
public class Test2 {
    public static void main(String[] args) {
            ArrayList<Person> list1 = new ArrayList<>();
            list1.add(new Person("路人1", 18));
            list1.add(new Person("路人2", 19));
            list1.add(new Person("路人3", 18));
            list1.add(new Person("路人1", 18));
            list1.add(new Person("路人2", 19));

            System.out.println("原始Person对象列表: " + list1);
        // 使用循环遍历去重
        ArrayList<Person> list2 = new ArrayList<>();
        //遍历原始列表 list1 中的每个 Person 对象
        for (Person item : list1) {
            if (!list2.contains(item)) {
                //使用 list2.contains(item) 检查新列表是否已包含该对象
                //只有不包含时才添加到 list2 中
                list2.add(item);
            }
        }
            System.out.println("去重后的Person对象列表: " + list2);
        }
}
class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //equals 和 hashCode 重写，确保 Person 对象能正确比较相等性
    //equals 方法：用于判断两个 Person 对象是否相等
    //hashCode 方法：为对象生成哈希码，与 equals 方法保持一致
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    //toString 方法：提供对象的字符串表示形式
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }


}
